package config

import (
	"log"

	"time"

	"github.com/spf13/viper"
)

type Config struct {
	App struct {
		Name string
		Port string
	}
	MongoDB struct {
		Name string
		Url  string
	}
	MySQL struct {
		Host         string
		Port         string
		User         string
		Password     string
		Name         string
		MaxIdleConns int
		MaxOpenConns int
	}
}

var AppConfig Config

// 默认执行MongoDB操作的超时时间
const DefaultMongoDBOperationTimeout = time.Second * 10

// 观看次数的所占的热度权重
const PopularityPlayCountWeight = 1

// 点赞量所占的热度权重
const PopularityLikeCountWeight = 5

// 收藏次数所占的热度权重
const PopularityCollectCountWeight = 20

// 评论数量所占的热度权重
const PopularityReviewCountWeight = 20

// 评分所占的热度权重--因为评分满分才10分
const PopularityRatingWeight = 10000

// 热度衰减系数，表示每小时热度衰减约0.1%
const PopularityDecayRate = 0.001

func InitConfig() {
	viper.SetConfigName("config")
	viper.SetConfigType("yml")
	viper.AddConfigPath("./config") //因为是在main.go里面调用的，所以相对路径是main.go的

	//读取配置文件
	if err := viper.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			// 配置文件未找到
			log.Fatal("配置文件未找到")

		} else {
			// 配置文件找到但解析错误
			log.Fatalf("配置文件解析错误: %v", err)
		}
		panic(err)
	}

	//设置默认值
	viper.SetDefault("app.port", ":3000")

	//并反序列化
	err := viper.Unmarshal(&AppConfig)
	if err != nil {
		log.Fatalf("配置文件读取并反序列化失败,err %v", err)
		panic("配置文件读取并反序列化失败" + err.Error())
	}

	//初始化环境变量
	initEnv()

	//初始化数据库
	initMySQL()
	InitMongoDB()

	//初始化redis
	initRedis()

	//初始化提示词
	initPrompt()
}
